ARD2  RC2
Airbag Reference Demonstrator using MPC5604P
CGM.c
Go to the documentation of this file.
00001 
00016 #include "derivative.h"
00017 #include "CGM.h"
00018 /*
00019  ******************************************************************************
00020  * Constants
00021  ******************************************************************************
00022  */
00023 
00024 /*
00025  ******************************************************************************
00026  * Globals
00027  ******************************************************************************
00028  */
00029 
00030 /*
00031  ******************************************************************************
00032  * vfnClockOutputEnable
00033  ******************************************************************************
00034  */
00035 void vfnClockOutputEnable(CGMCLKOutConfig_t tMyCGMConfig)
00036 {
00037   
00038   /* Start by determining if we want to enable or disable */
00039   if(TRUE == tMyCGMConfig.P.Enable)
00040   {
00041     /* Select input and division factor */
00042     CGM.OCDSSC.B.SELDIV = tMyCGMConfig.P.Divisor;
00043     CGM.OCDSSC.B.SELCTL = tMyCGMConfig.P.Source;
00044     
00045     /* Enable output */
00046     CGM.OCEN.R = TRUE;
00047   }
00048   else
00049   {
00050     /* Disable the output */
00051     CGM.OCEN.R = CLEAR;
00052   }
00053   
00054   return;
00055 }
00056 /*
00057  ******************************************************************************
00058  * vfnClockOutputEnable
00059  ******************************************************************************
00060  */
00061 uint8_t u8fnClockPLLConfig(uint8_t u8PLLInstance, uint8_t u8IDF, uint8_t u8ODF,
00062                            uint8_t u8LDF)
00063 {
00064   uint8_t  u8Status;
00065   uint16_t u16Counter;
00066   
00067   u8Status = CLEAR;
00068   u16Counter = CLEAR;
00069   
00070   
00071   /* Start by making sure that our instance is valid */
00072   if(N_OF_PLL_INSTANCES > u8PLLInstance)
00073   {
00074     /* Make sure that passed arguments are within limits */
00075     if((BIT4 > u8IDF) && (BIT2 > u8ODF) && (BIT7 > u8LDF))
00076     {
00077       /* Enable Pll progressive switching */
00078       CGM.FMPLL[u8PLLInstance].CR.B.EN_PLL_SW = TRUE;
00079       
00080       /* Final frequency will be (Fosc * LDF) / (IDF * ODF) */
00081       CGM.FMPLL[u8PLLInstance].CR.B.IDF  = u8IDF;
00082       CGM.FMPLL[u8PLLInstance].CR.B.ODF  = u8ODF;
00083       CGM.FMPLL[u8PLLInstance].CR.B.NDIV = u8LDF;
00084     
00085       /* We don't know if settings have taken because we dont know if the    */
00086       /* PLL is on or off at this point. That will depend on some other fn.  */
00087     }
00088     else
00089     {
00090       u8Status = INVALID_PLL_DIVIDER;
00091     }
00092   }
00093   else
00094   {
00095     u8Status = INVALID_PLL_INSTANCE;
00096   }
00097   
00098   return(u8Status);
00099 }
00100 /*
00101  ******************************************************************************
00102  * vfnClearPLLFlag
00103  ******************************************************************************
00104  */
00105 void vfnClockClearPLLFlag(uint8_t u8PLLInstance)
00106 {
00107   CGM.FMPLL[u8PLLInstance].CR.B.PLL_FAIL_FLAG = TRUE;
00108   return;
00109 }
00110 //void vfnClockPLLConfigureMonitoring(uint8_t u8PLLInstance, uint16_t u16UL, 
00111 //                                    uint16_t u16LL)
00112 //{
00113 //  if(PLL_INSTANCE_0 = u8PLLInstance)
00114 //  {
00115 //    CGM.CMU_0_HFREF_A = u16UL;
00116 //  }
00117 //  return;
00118 //}
00119 /*
00120  ******************************************************************************
00121  *
00122  *  End of file.
00123  *
00124  ******************************************************************************
00125  */